تعلم Java في 10 دقائق
Java هي لغة برمجة عالية المستوى وموجهة للكائنات تُعرف بمبدأ “اكتب مرة واحدة، اعمل في أي مكان”. يغطي هذا الدليل ميزات Java 21+ ويساعدك على تعلم أساسيات Java بسرعة.
1. كتابة أول برنامج Java
برامج Java منظمة في فئات (classes). لنبدأ ببرنامج بسيط. أنشئ ملفًا باسم HelloWorld.java
:
public class HelloWorld {
public static void main(String[] args) {
System.out.println("مرحبا بالعالم!");
}
}
قم بتجميع وتشغيل البرنامج:
javac HelloWorld.java
java HelloWorld
الناتج سيكون:
مرحبا بالعالم!
هذا البرنامج البسيط يوضح البنية الأساسية لـ Java. كل برنامج Java يجب أن يحتوي على فئة واحدة على الأقل، والدالة main
هي نقطة البداية.
2. الصيغة الأساسية
صيغة Java منظمة وتتبع قواعد محددة:
// هذا تعليق في سطر واحد
/* هذا تعليق
في عدة أسطر */
public class BasicSyntax {
public static void main(String[] args) {
System.out.println("مرحبا، Java!");
}
}
القواعد الأساسية للصيغة في Java:
- حساسية الحروف: Java حساسة للحروف الكبيرة والصغيرة.
Variable
وvariable
مختلفتان. - أسماء الفئات: يجب أن تبدأ بحرف كبير وتتبع اتفاقية CamelCase.
- أسماء الدوال: يجب أن تبدأ بحرف صغير وتتبع اتفاقية camelCase.
- الفاصلة المنقوطة: كل جملة يجب أن تنتهي بفاصلة منقوطة
;
. - الأقواس المعقوفة: كتل الكود تُعرف باستخدام الأقواس المعقوفة
{}
. - التعليقات: تعليقات السطر الواحد تستخدم
//
، التعليقات متعددة الأسطر تستخدم/* */
.
3. المتغيرات وأنواع البيانات
Java لغة ذات أنواع ثابتة، مما يعني أنه يجب تعريف أنواع المتغيرات بشكل صريح.
قواعد تسمية المتغيرات:
- يجب أن تبدأ بحرف أو شرطة سفلية
_
أو رمز الدولار$
. - يمكن أن تحتوي على حروف وأرقام وشرطات سفلية ورموز دولار.
- لا يمكن أن تكون كلمة مفتاحية في Java.
- يجب أن تتبع اتفاقية camelCase.
أنواع البيانات الأساسية في Java:
- byte: عدد صحيح مع إشارة 8 بت (-128 إلى 127)
- short: عدد صحيح مع إشارة 16 بت (-32,768 إلى 32,767)
- int: عدد صحيح مع إشارة 32 بت (-2^31 إلى 2^31-1)
- long: عدد صحيح مع إشارة 64 بت (-2^63 إلى 2^63-1)
- float: عدد عشري 32 بت
- double: عدد عشري 64 بت
- boolean: صحيح أو خاطئ
- char: حرف Unicode 16 بت
public class DataTypes {
public static void main(String[] args) {
// أنواع الأعداد الصحيحة
byte العمر = 25;
short السنة = 2024;
int السكان = 1000000;
long المسافة = 93000000L; // لاحقة L للـ long
// أنواع الأعداد العشرية
float درجةالحرارة = 36.5f; // لاحقة f للـ float
double pi = 3.14159265359;
// النوع المنطقي والحرف
boolean نشط = true;
char الدرجة = 'A';
// النص (نوع مرجعي)
String الاسم = "أحمد";
System.out.println("الاسم: " + الاسم + "، العمر: " + العمر);
}
}
3.1 عمليات النصوص
النصوص في Java هي كائنات وليست أنواع أساسية:
public class StringExample {
public static void main(String[] args) {
String النص = "برمجة Java";
System.out.println("الطول: " + النص.length());
System.out.println("أحرف كبيرة: " + النص.toUpperCase());
System.out.println("أحرف صغيرة: " + النص.toLowerCase());
System.out.println("الحرف في الفهرس 0: " + النص.charAt(0));
System.out.println("نص فرعي: " + النص.substring(0, 4));
System.out.println("يحتوي على 'Java': " + النص.contains("Java"));
// ربط النصوص
String التحية = "مرحبا، " + "العالم!";
System.out.println(التحية);
// تنسيق النصوص
String منسق = String.format("π يساوي تقريبًا %.2f", 3.14159);
System.out.println(منسق);
}
}
4. المصفوفات والمجموعات
4.1 المصفوفات
المصفوفات تخزن عدة قيم من نفس النوع:
public class ArrayExample {
public static void main(String[] args) {
// تعريف وتهيئة المصفوفة
int[] أرقام = {1, 2, 3, 4, 5};
String[] فواكه = new String[3];
فواكه[0] = "تفاح";
فواكه[1] = "موز";
فواكه[2] = "برتقال";
// الوصول لعناصر المصفوفة
System.out.println("أول رقم: " + أرقام[0]);
System.out.println("طول المصفوفة: " + أرقام.length);
// التكرار عبر المصفوفات
for (int i = 0; i < أرقام.length; i++) {
System.out.println("الرقم " + i + ": " + أرقام[i]);
}
// حلقة for المحسنة (for-each)
for (String فاكهة : فواكه) {
System.out.println("الفاكهة: " + فاكهة);
}
// مصفوفات متعددة الأبعاد
int[][] مصفوفة = {{1, 2}, {3, 4}, {5, 6}};
System.out.println("عنصر المصفوفة [1][1]: " + مصفوفة[1][1]);
}
}
4.2 المجموعات
إطار عمل المجموعات في Java يوفر هياكل بيانات ديناميكية:
import java.util.*;
public class CollectionsExample {
public static void main(String[] args) {
// ArrayList (مصفوفة ديناميكية)
ArrayList<String> أسماء = new ArrayList<>();
أسماء.add("أحمد");
أسماء.add("فاطمة");
أسماء.add("محمد");
أسماء.remove("فاطمة");
System.out.println("الأسماء: " + أسماء);
// HashMap (أزواج مفتاح-قيمة)
HashMap<String, Integer> أعمار = new HashMap<>();
أعمار.put("أحمد", 25);
أعمار.put("فاطمة", 30);
أعمار.put("محمد", 35);
System.out.println("عمر أحمد: " + أعمار.get("أحمد"));
// HashSet (عناصر فريدة)
HashSet<Integer> أرقامفريدة = new HashSet<>();
أرقامفريدة.add(1);
أرقامفريدة.add(2);
أرقامفريدة.add(2); // مكرر، لن يضاف
أرقامفريدة.add(3);
System.out.println("الأرقام الفريدة: " + أرقامفريدة);
// التكرار عبر المجموعات
for (String اسم : أسماء) {
System.out.println("الاسم: " + اسم);
}
for (Map.Entry<String, Integer> مدخل : أعمار.entrySet()) {
System.out.println(مدخل.getKey() + ": " + مدخل.getValue());
}
}
}
5. العمليات والمشغلات
Java توفر مشغلات متنوعة لعمليات مختلفة:
- المشغلات الحسابية:
+
،-
،*
،/
،%
(باقي القسمة)،++
(زيادة)،--
(نقصان) - مشغلات المقارنة:
==
،!=
،>
،<
،>=
،<=
- المشغلات المنطقية:
&&
(و)،||
(أو)،!
(ليس) - المشغلات البتية:
&
،|
،^
،~
،<<
،>>
،>>>
- مشغلات الإسناد:
=
،+=
،-=
،*=
،/=
،%=
public class OperatorsExample {
public static void main(String[] args) {
int a = 10, b = 3;
// العمليات الحسابية
System.out.println("الجمع: " + (a + b));
System.out.println("الطرح: " + (a - b));
System.out.println("الضرب: " + (a * b));
System.out.println("القسمة: " + (a / b));
System.out.println("باقي القسمة: " + (a % b));
// الزيادة والنقصان
System.out.println("الزيادة المسبقة: " + (++a));
System.out.println("النقصان اللاحق: " + (b--));
// عمليات المقارنة
System.out.println("متساوي: " + (a == b));
System.out.println("غير متساوي: " + (a != b));
System.out.println("أكبر من: " + (a > b));
// العمليات المنطقية
boolean x = true, y = false;
System.out.println("و: " + (x && y));
System.out.println("أو: " + (x || y));
System.out.println("ليس: " + (!x));
// عمليات الإسناد
int c = 5;
c += 3; // c = c + 3
System.out.println("بعد += 3: " + c);
}
}
6. التحكم في التدفق
6.1 الجمل الشرطية
public class ConditionalExample {
public static void main(String[] args) {
int النتيجة = 85;
// جملة if-else
if (النتيجة >= 90) {
System.out.println("الدرجة: A");
} else if (النتيجة >= 80) {
System.out.println("الدرجة: B");
} else if (النتيجة >= 70) {
System.out.println("الدرجة: C");
} else {
System.out.println("الدرجة: F");
}
// المشغل الثلاثي
String الحكم = (النتيجة >= 60) ? "نجح" : "رسب";
System.out.println("الحكم: " + الحكم);
// جملة switch
char الدرجة = 'B';
switch (الدرجة) {
case 'A':
System.out.println("ممتاز!");
break;
case 'B':
System.out.println("جيد!");
break;
case 'C':
System.out.println("متوسط");
break;
default:
System.out.println("درجة غير صحيحة");
}
}
}
6.2 الحلقات
public class LoopExample {
public static void main(String[] args) {
// حلقة for
System.out.println("حلقة for:");
for (int i = 0; i < 5; i++) {
System.out.println("التكرار: " + i);
}
// حلقة for المحسنة (for-each)
System.out.println("\nحلقة for-each:");
int[] أرقام = {1, 2, 3, 4, 5};
for (int رقم : أرقام) {
System.out.println("الرقم: " + رقم);
}
// حلقة while
System.out.println("\nحلقة while:");
int عداد = 0;
while (عداد < 3) {
System.out.println("العداد: " + عداد);
عداد++;
}
// حلقة do-while
System.out.println("\nحلقة do-while:");
int x = 0;
do {
System.out.println("X: " + x);
x++;
} while (x < 3);
// break و continue
System.out.println("\nBreak و continue:");
for (int i = 0; i < 10; i++) {
if (i == 5) {
break; // الخروج من الحلقة
}
if (i % 2 == 0) {
continue; // تجاهل الأرقام الزوجية
}
System.out.println("رقم فردي: " + i);
}
}
}
7. الدوال (الوظائف)
الدوال في Java هي وظائف تنتمي للفئات:
public class MethodExample {
// دالة بدون معاملات وبدون قيمة إرجاع
public static void تحية() {
System.out.println("مرحبا بالعالم!");
}
// دالة مع معاملات وقيمة إرجاع
public static int جمع(int a, int b) {
return a + b;
}
// دالة مع معاملات متعددة
public static String تنسيقالاسم(String الاسمالأول, String الاسمالأخير) {
return الاسمالأول + " " + الاسمالأخير;
}
// تحميل الدوال (نفس الاسم، معاملات مختلفة)
public static int ضرب(int a, int b) {
return a * b;
}
public static double ضرب(double a, double b) {
return a * b;
}
// معاملات متغيرة
public static int مجموع(int... أرقام) {
int المجموع = 0;
for (int رقم : أرقام) {
المجموع += رقم;
}
return المجموع;
}
public static void main(String[] args) {
تحية();
int النتيجة = جمع(5, 3);
System.out.println("نتيجة الجمع: " + النتيجة);
String الاسمالكامل = تنسيقالاسم("أحمد", "محمد");
System.out.println("الاسم الكامل: " + الاسمالكامل);
System.out.println("ضرب الأعداد الصحيحة: " + ضرب(4, 5));
System.out.println("ضرب الأعداد العشرية: " + ضرب(2.5, 3.0));
System.out.println("مجموع أرقام متعددة: " + مجموع(1, 2, 3, 4, 5));
}
}
8. البرمجة الموجهة للكائنات
8.1 الفئات والكائنات
public class شخص {
// متغيرات الحالة (الحقول)
private String الاسم;
private int العمر;
private String الايميل;
// المنشئ
public شخص(String الاسم, int العمر, String الايميل) {
this.الاسم = الاسم;
this.العمر = العمر;
this.الايميل = الايميل;
}
// المنشئ الافتراضي
public شخص() {
this("غير معروف", 0, "");
}
// دوال الحصول
public String الحصولعلىالاسم() {
return الاسم;
}
public int الحصولعلىالعمر() {
return العمر;
}
public String الحصولعلىالايميل() {
return الايميل;
}
// دوال التعديل
public void تعديلالاسم(String الاسم) {
this.الاسم = الاسم;
}
public void تعديلالعمر(int العمر) {
if (العمر >= 0) {
this.العمر = العمر;
}
}
public void تعديلالايميل(String الايميل) {
this.الايميل = الايميل;
}
// دالة الحالة
public void التعريف() {
System.out.println("مرحبا، أنا " + الاسم + "، عمري " + العمر + " سنة.");
}
// دالة مع منطق
public boolean بالغ() {
return العمر >= 18;
}
// دالة toString (تجاوز toString للكائن)
@Override
public String toString() {
return "شخص{الاسم='" + الاسم + "', العمر=" + العمر + ", الايميل='" + الايميل + "'}";
}
public static void main(String[] args) {
// إنشاء الكائنات
شخص شخص1 = new شخص("أحمد", 25, "[email protected]");
شخص شخص2 = new شخص();
// استخدام الدوال
شخص1.التعريف();
System.out.println("بالغ: " + شخص1.بالغ());
شخص2.تعديلالاسم("فاطمة");
شخص2.تعديلالعمر(17);
شخص2.تعديلالايميل("[email protected]");
System.out.println(شخص1.toString());
System.out.println(شخص2.toString());
}
}
هذا الدليل الشامل لـ Java يغطي المفاهيم الأساسية المطلوبة للبدء في برمجة Java. نظام الأنواع القوي والخصائص الموجهة للكائنات والمكتبة القياسية الواسعة في Java تجعلها قوية لبناء تطبيقات قوية. تدرب على هذه الأمثلة وجرب الكود لتعميق فهمك لمفاهيم برمجة Java.